package com.starlinkdt.service.system;

import com.baomidou.mybatisplus.extension.service.IService;
import com.starlinkdt.common.domain.system.entity.TaskDispatch;

import java.util.List;
import java.util.Optional;

public interface ITaskDispatchService extends IService<TaskDispatch> {

    /**
     * 分页获取待处理任务
     */
    public List<TaskDispatch> getPendingTasks(int pageSize, int taskType, String businessType);

    /**
     * 分页获取失败任务
     */
    public List<TaskDispatch> getFailedTasksForRetry(int pageNum, int pageSize, int taskType, String businessType, int tryTimes);

    /**
     * 分页获取进行中的任务
     */
    public List<TaskDispatch> getProcessingTasksForRetry(int pageSize, int taskType, String businessType);

    /**
     * 批量标记任务成功
     */
    public boolean batchMarkAsSuccess(List<TaskDispatch> tasks);

    /**
     * 批量标记任务失败并记录错误日志
     */
    public boolean batchMarkAsFailed(List<TaskDispatch> tasks);

    /**
     * 批量标记任务正在执行
     *
     * @return
     */
    public boolean batchMarkAsProcessing(List<TaskDispatch> tasks);

    /**
     * 批量标记任务为不处理
     *
     * @param tasks
     * @return
     */
    public boolean batchMarkAsNoHandled(List<TaskDispatch> tasks);

    /**
     * 批量标记任务为待处理
     *
     * @param tasks
     * @return
     */
    public boolean batchMarkAsPending(List<TaskDispatch> tasks);

    /**
     * 判断是否存在待处理任务
     *
     * @param businessId
     * @return
     */
    boolean existsPendingTask(String businessId);

    /**
     * 获取最新的失败任务
     *
     * @param businessId
     * @return
     */
    public Optional<TaskDispatch> getLatestFailedTask(String businessId);

}
